const expect = require('chai').expect;
const webdriver = require('webdriverio');
const fs = require('fs');
const chalk = require('chalk');
const TIMEOUT = 5000;
describe('Gauges UI', function() {
this.timeout(TIMEOUT);
let client;
let url = 'file://' + fs.realpathSync('.') + '/test/gauges.html';
console.log(chalk.cyan(' Loading UI from "' + url + '"'));
before(() => {
client = webdriver.remote({
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['no-sandbox']
}
}
});
return client.init();
});
it('it should have 2 gauges drawn', done => {
client
.url(url)
.execute(() => {
let customGauge = document.gauges[0];
let defaultGauge = document.gauges[1];
return customGauge instanceof RadialGauge &&
defaultGauge instanceof RadialGauge;
})
.then(result => {
expect(result.value).equals(true);
done();
});
});
it('should have title properly drawn', done => {
client
.execute(() => {
let gauge = document.gauges[0];
let w = gauge.canvas.element.width;
let h = gauge.canvas.element.height;
let max = w > h ? h / 2 : w / 2;
let textDelta = max / 4.25;
let textHeight = 24 * (max / 200);
let textWidth = 70;
let centerX = w / 2;
let centerY = h / 2;
let x = centerX - textWidth / 2;
let y = centerY - textDelta - textHeight + textHeight / 4;
let bg = [33, 33, 33]; // #222 - 1 each for alpha-blending
let fg = [103, 103, 103]; // #666 + 1 each for alpha-blending
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
canvas.width = textWidth;
canvas.height = textHeight;
ctx.drawImage(gauge.canvas.element,
x, y, textWidth, textHeight,
0, 0, textWidth, textHeight);
let pixels = ctx.getImageData(0, 0, textWidth, textHeight);
let i = 0;
let s = pixels.data.length;
for (; i < s; i += 4) {
if (!(
pixels.data[i] >= bg[0] &&
pixels.data[i] <= fg[0] &&
pixels.data[i + 1] === pixels.data[i] &&
pixels.data[i + 2] === pixels.data[i] &&
pixels.data[i + 3] === 255))
{
return false;
}
}
return true;
})
.then(result => {
expect(result.value).equals(true);
done();
});
});
after(() => {
return client.end();
});
});